/*
 * 问题：剧情树选择路径模拟
 * 描述：存在固定结构的剧情树：
 *       - 根节点下有两个子节点：左(A)、右(B)
 *       - A节点下有两个子节点：左(C)、右(D)
 *       - B节点下有两个子节点：左(E)、右(F)
 *       输入由0和1组成的选择序列（0表示向左，1表示向右），
 *       按序列选择路径，直到到达叶子节点(C/D/E/F)，输出最终结局。
 * 规则：
 *   1. 选择序列长度不超过5，但剧情树最多2步即可到达叶子节点
 *   2. 仅需处理前2次选择（超过2步的选择不影响结果）
 */

#include <stdio.h>
#include <string.h>  // 提供strlen函数，用于获取字符串长度

int main() {
    // 存储选择序列（最多5个字符，加1个结束符'\0'，共6字节）
    char choices[6];
    
    // 读取输入的选择序列（如"01"、"1"、"001"等）
    scanf("%s", choices);
    
    // 获取选择序列的长度（字符个数）
    int len = strlen(choices);
    
    // 第一次选择的方向（0向左，1向右）
    // 若序列为空，理论上不会出现（题目隐含输入有效）
    char first = choices[0];
    
    // 分支1：第一次选择向左（0），进入A节点
    // 或序列长度为1（无论第一次选什么，只需走一步）
    if (len == 1 || first == '0') {
        // 子情况1：序列长度为1（只有一次选择）
        if (len == 1) {
            // 第一次选0→A节点的左子节点C
            // 若第一次选1但序列长度为1→按规则进入B节点的左子节点E（见下方else分支）
            printf("C\n");
        } else {
            // 子情况2：序列长度≥2，处理第二次选择
            char second = choices[1];  // 第二次选择的方向
            if (second == '0') {
                // 第二次选0→A节点的左子节点C
                printf("C\n");
            } else {
                // 第二次选1→A节点的右子节点D
                printf("D\n");
            }
        }
    } else {
        // 分支2：第一次选择向右（1），进入B节点
        // 且序列长度≥2（因为len==1的情况已在上方处理）
        if (len == 1) {
            // 第一次选1且序列长度为1→B节点的左子节点E
            printf("E\n");
        } else {
            // 处理第二次选择
            char second = choices[1];
            if (second == '0') {
                // 第二次选0→B节点的左子节点E
                printf("E\n");
            } else {
                // 第二次选1→B节点的右子节点F
                printf("F\n");
            }
        }
    }
    
    return 0;
}
    